/*
 * @Author: csh
 * @Date: 2022-09-20
 * @LastEditors: BigFlower
 * @LastEditTime: 2022-10-07 17:23:05
 * @Description: 卡片工程。 目前支持两种方式：1. 随机生成； 2. 从 json 中读取
 * @FilePath: \count-count\src\card-factory.js
 */

// 卡片的宽高，用于计算偏移量
export const CARD_WIDTH = 70;
export const CARD_HEIGHT = 70;

//#region 随机生成默认卡片

// 卡片有几种，种类越多，难度越大
export const CARD_KIND = 10;
const CARD_KIND_GROUP_COUNT = 4;
// 随机移除多少个数据
const RANDOM_REMOVE_COUNT = 30;
// 最终卡片的总数(因为是 3个 一消除，3 * 所以卡片种类 * 一共有多少组，就是总数)
const CARD_TOTAL = 3 * CARD_KIND * CARD_KIND_GROUP_COUNT + RANDOM_REMOVE_COUNT;
// 临时的卡片的总数（多生成一些卡片，然后才可以随机消除一些）
const CARD_TOTAL_TEMP = CARD_TOTAL + RANDOM_REMOVE_COUNT;

const cardInfos = [];
// 随机生成的卡片内容
const cardContents = [];
/**
 * 初始化，生成卡片UI
 */
export function initDefaultCardInfos() {
  cardContents.length = 0;
  cardInfos.length = 0;
  initRandomContent();

  // 这里生成的卡片数量，其实是与最初生成的 cardContents 数量不符的，但是，，，懒得搞了，意思意思得了
  const offsetX = CARD_WIDTH / 2;
  const offsetY = CARD_HEIGHT / 2;
  initOneLevelCardInfos(6, 6, 1);
  initOneLevelCardInfos(5, 5, 2, offsetX * 1, offsetY * 1);
  initOneLevelCardInfos(4, 4, 3, offsetX * 2, offsetY * 2);
  initOneLevelCardInfos(3, 3, 4, offsetX * 3, offsetY * 3);

  randomRemoveCard();
  return cardInfos;
}
/**
 * 随机生成卡片内容
 */
function initRandomContent() {
  let cardKind = 0;
  for (let index = 0; index < CARD_TOTAL_TEMP; index++) {
    if (cardKind == CARD_KIND) cardKind = 0;
    cardContents.push(cardKind);
    cardKind++;
  }
  // 打乱顺序
  cardContents.sort(function () {
    return 0.5 - Math.random();
  });
  console.log("random cardContents", cardContents);
}
/**
 * 生成某一层的卡片们
 * @param {行} row
 * @param {列} column
 * @param {层数} level
 * @param {X 偏移量} offsetX
 * @param {Y 偏移量} offsetY
 */
function initOneLevelCardInfos(row, column, level, offsetX = 0, offsetY = 0) {
  for (let rowIndex = 0; rowIndex < row; rowIndex++) {
    for (let columnIndex = 0; columnIndex < column; columnIndex++) {
      if (cardInfos.length === CARD_TOTAL_TEMP) return;
      const x = CARD_WIDTH * rowIndex + offsetX;
      const y = CARD_HEIGHT * columnIndex + offsetY;
      cardInfos.push({
        id: rowIndex + "-" + columnIndex + "-" + level,
        x,
        y,
        level,
        translateStyle: `transform: translate(${x}px, ${y}px);z-index: ${level}`,
        isBottom: false,
        cardClass: ["card"],
        content: cardContents.pop(),
      });
    }
  }
}
/**
 * 随机移除一些卡片
 */
function randomRemoveCard() {
  for (let index = 0; index < RANDOM_REMOVE_COUNT; index++) {
    const random = Math.floor(Math.random() * cardInfos.length);
    console.log("random", random);
    cardInfos.splice(random, 1);
  }
}
//#endregion

//#region 从 json 中读取卡片
import originJsonCardInfos from "/public/cards.json";
export function initJsonCardInfos() {
  originJsonCardInfos.forEach((card, index) => {
    card.id = index;
    card.translateStyle = `transform: translate(${card.x}px, ${card.y}px);z-index: ${card.level}`;
  });
  return [...originJsonCardInfos];
}
//#endregion


//#region 后台管理工具中生成的数据
let originManageredCardInfos = []
export function setManageredCardInfos(cardInfos) {
  originManageredCardInfos = []
  originManageredCardInfos = [...cardInfos]
  console.log('setManageredCardInfos', originManageredCardInfos)
}
export function initManageredCardInfos() {
  return [...originManageredCardInfos];
}
//#endregion
